package controllers;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Constructor;

import javax.imageio.ImageIO;

import models.Carte;
import models.Condition_meteo;
import models.Coordonnee;
import models.Utilisateur;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

import controllers.CRUD.ObjectType;
import play.*;
import play.data.binding.Binder;
import play.data.validation.*;
import play.db.DB;
import play.db.Model;
import play.exceptions.TemplateNotFoundException;
import play.libs.Mail;
import play.mvc.*;

@CRUD.For(models.Carte.class)
@With(Secure.class)
public class AdminCarte extends CRUD
{
	// Crée une nouvelle carte
    public static void enregistrer(@Required
    								@MaxSize(50)
    								@MinSize(5)
    								String libelle_carte,
    								@Required
    								File file,
    								@Required
    								int precision)  
    {
		if(validation.hasErrors())
		{
			render("AdminCarte/enregistrer.html", libelle_carte);
		}
		
		else if(Carte.find("byLibelle_carte", libelle_carte).first() == null)
		{
			String[] split_name = file.getAbsolutePath().split("\\.");
			int ext_pos = split_name.length-1;
			String file_type = split_name[ext_pos].toLowerCase();
			
			if(file_type.compareTo("jpg") == 0 || file_type.compareTo("bmp") == 0)
			{
				Carte carte = new Carte(libelle_carte).save();
				
				String message = carte.creerCoordonnees(file, precision);
				
				if(message != null){
					render("AdminCarte/enregistrer.html", libelle_carte, message);
				}
				else{
					AdminCarte.index();
				}
			}
			else
			{
				String message = "Extension de fichier incorrecte";
				render("AdminCarte/enregistrer.html", libelle_carte, message);
			}
		}
		
		else
		{
			String message = "Nom de carte déjà utilisé";
			render("AdminCarte/enregistrer.html", libelle_carte, message);			
		}
    }
    
	// Edite une carte
    public static void edit(long id, @Required @MaxSize(50) @MinSize(5) String libelle_carte)  
    {
    	Carte carte = Carte.findById(id);
    	
		if(validation.hasErrors())
		{
			render("AdminCarte/show.html", carte, libelle_carte);
		}
		
		else if(Carte.find("byLibelle_carte", libelle_carte).first() != null &&
				Carte.find("byLibelle_carte", libelle_carte).first() != carte)
		{
			String message = "Nom de carte déjà utilisé";
			render("AdminCarte/show.html", carte, libelle_carte, message);			
		}
		
		else
		{
			carte.libelle_carte = libelle_carte;
			carte.save();
			AdminCarte.index();
		}
    } 
    
    // Affiche la page d'édition
    public static void show(String id) 
    {
    	long _id = Long.parseLong(id);
        Carte carte = Carte.findById(_id);
        String libelle_carte = carte.libelle_carte;
        render(carte, libelle_carte);
    }    
}
